Today's standard computer architecture calls for a number of separate components, such as a central processing unit ("CPU"), memory, ports and peripheral devices to be coupled together by electrical buses to provide a pathway for data between the various components. Electrical buses are simply sets of conductors (or "lines") designed to operate as a group.
In typical computer architectures, there are address buses, data buses, control buses and input/output ("I/O")-memory buses. Address buses are designed to transmit address data to allow selection of devices and memory locations for data transfer. Data buses carry the substantive data to be transferred. Control buses transmit control signals to allow for synchronization and priority among the various components of the computer, allowing them to work in concert. I/O-memory buses allow data to be transferred between areas of memory (as in direct memory access ("DMA")) or to and from I/O ports to external devices.
During normal operation of computer systems, an electronic component is required to supply a level of electrical current to drive the various lines of the buses, enabling them to carry the signals. In personal computers ("PCs"), this component is known as a system controller. Some system controllers are provided with the capability of driving the various bus lines at a selectable drive current level. With such controllers, a digital number representing the desired level is provided to the system controller at a point early in the initialization (or "booting") of the computer system to select a drive current level.
Components transmit data over buses by changing voltages and therefore switching the electrical current on the various lines of the bus. In binary digital computers, each line in a bus is capable of assuming one of two possible states at a given moment. These states are represented by presence or absence of a voltage, or potential difference relative to ground, on each of the lines. In some schemes, the presence of a voltage denotes a binary zero and the absence of a voltage denotes a binary one. In other schemes, the presence of a voltage denotes a change from one state to the other, while the absence of a voltage denotes no change.
During operation, each particular line may change between binary one and binary zero many millions of times a second. Individual bits in the signal thus should have relatively sharp rising and falling edges and are relatively brief in duration. It is vital to preserve the integrity and fidelity of the data transmitted over the bus. Therefore, it is important that transitions between binary one and binary zero be fast and sure. In an ideal world, the bus changes voltages instantaneously and data is transmitted reliably.
Unfortunately, in the real world, buses are real electrical conductors and therefore contain capacitance, resistance and inductance ("transmission line effects") just as do all real conductors.
Capacitance traps electrical charge within the line, presenting, in a sense, a momentum against which the change must take place. When the line is directed to change from a binary one to a binary zero (meaning a grounding of the line), it resists the change, typically causing a voltage oscillation at the point of transition (termed "ringing"). Furthermore, excess electrical energy may reflect back from impedances, causing reflections and concomitant voltage oscillations. This reflection may be of sufficient magnitude as to cause components reading data from the bus to misread the oscillation as the presence of a voltage (a binary one) instead of the intended binary zero, thereby corrupting the flow of data.
Resistance dissipates electrical energy in the conductor, reducing the efficiency of the computer bus. Increased resistance may attenuate signals on the bus to the point that data are lost in transmission, compromising data integrity.
Inductance causes crosstalk between neighboring conductors (mutual inductance) or resistance to changes in voltage on a given conductor (self inductance). Thus, signal transitions may be delayed or made noninstantaneous, further corrupting the data. Finally, capacitance, resistance and inductance can cooperate to cause harmonic sympathy on conductors in an electrical bus, resulting in spurious frequencies being created, maintained or amplified.
During design of a new computer system, it is important to ensure that buses are not susceptible to signal distortion from stray capacitance, resistance or inductance. There are accepted design rules that can be applied to minimize these ill effects. It is also important to tailor the drive current level for the various bus lines to the capacitance, resistance and inductance of the bus lines. If the drive current level is set too low, there may be an insufficient current to carry the signals during times of heavy loads, causing errors.
On the other hand, if drive current is set too high, several disadvantages result. First, the excess current can cause reflection on the bus lines, thereby distorting pulse edges and creating false signal transitions. Second, the bus reflection creates high frequency energy that, in turn, causes electromagnetic interference ("EMI"). Third, energy is wasted in excess drive current, increasing the overall power consumption of the computer system. This disadvantage is particularly realized in portable computer systems, wherein battery power is limited. However, with the advent of so-called "green PCs," energy conservation in desktop PCs is also of concern. "Misdrive" is defined as a condition in which too little or too much drive current is supplied. In the past, in PCs employing system controllers with programmable drive current levels, the drive current levels were immutably determined during design of the computer system and established with hard-wired resistors or the like in the computer system.
Todays PC's employ, in general, an open architecture wherein a plurality of expansion slots are provided within a main chassis. Each of the slots has a connector adapted to receive a peripheral (also "adapter" or "expansion") daughter board (or, interchangeably, "card") therein. The connector receives a card edge having a plurality of card edge contacts thereon. The contacts couple circuitry on the peripheral card to expansion address, data, control and I/O-memory buses on the PC. A PC user is therefore able to equip the PC to perform desired functions.
For instance, there are peripheral cards containing modems; facsimiles; disk drives or controllers; video controllers; serial, parallel or small computer systems interface ("SCSI") ports; auxiliary memory; coprocessors; sound boards; recognition boards; network boards and the like. There are many manufacturers of these and other cards, resulting in literally thousands of different card combinations and permutations that are possible to install in a single computer system. Since each of these cards couples to each of the computer system's expansion buses, the installation of a card to a system is likely to have an effect on the electrical characteristics (capacitance, resistance and inductance) of each of the conductors in the buses. The cards may electrically interact with each other in a nonobvious way to further compromise bus performance if the proper drive current level is not present.
Further, PCs are capable of receiving varying amounts of main memory. It is conventional to package random access memory ("RAM") in single in-line memory modules ("SIMMs"). Users can plug in or remove SIMMs as units, thereby providing a convenient way of upgrading the main memory capacity of a PC. Unfortunately, drive current required is also a function of main memory size.
Thus, given the open architecture and the wide variation of capacitance, inductance and resistance that the various possible configurations can create on the bus lines, it is impossible to choose a drive current level for the lines that is appropriate under all configurations. Therefore, designers have erred on the side of excess, providing a drive current level that sometimes causes undue reflection, EMI and power wastage. Some PCs determine the amount of main memory installed in the PC and set drive current as a function of the amount of main memory. Unfortunately, main memory size is not the only factor determining the proper drive current required.
What is needed in the art is a circuit within the computer system for determining and establishing the proper drive current level of the various bus lines as the computer system is operating, thereby allowing the particular complete configuration (and its resulting capacitive and inductive effects) of the computer system to be taken into account in real time. Preferably, the circuit should take the form of a closed feedback control loop.